#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
const int N=1e6+10;
int h[2*N],e[2*N],ne[2*N],idx;
int color[N];
int n,m;
void add(int a,int b)
{
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx;
	idx++;
}
bool dfs(int u,int c)
{
	color[u]=c;
	for(int i=h[u];i!=-1;i=ne[i])
	{
		int j=e[i];
		if(color[j]==-1)
		{
			if(!dfs(j,!c)) return false;
			
		}
		else if(color[j]==c) return false;
	}
	return true;
}
bool check()
{
	memset(color,-1,sizeof(color));
	bool flag=true;
	for(int i=1;i<=n;i++)
		{
			if(color[i]==-1)
			{
				if(!dfs(i,0))
				{
					flag=false;
					break;
				}
			}
			
		}
	return flag;
	
}
int main()
{
	
	
	while(cin>>n>>m)
	{
		int a,b;
		memset(h,-1,sizeof(h));
		for(int i=0;i<m;i++)
		{
			scanf("%d %d",&a,&b);
			add(a,b);
			//add(b,a);
		}
		if(check())
		{
			cout<<"Yes";
		}
		else cout<<"No";
		cout<<endl;
		idx=0;
		memset(e,0,sizeof(e));
		memset(ne,0,sizeof(ne));
		
		
	} 

	return 0;
}

